ডেটা সায়েন্স এবং মেশিন লার্নিং প্রজেক্টে Raw Data Cleaning এবং Preprocessing একটি অত্যন্ত গুরুত্বপূর্ণ ধাপ। কারণ, raw ডেটা সাধারণত অনেক অনিয়মিত, অসম্পূর্ণ এবং অনুচিত থাকতে পারে। এই ধাপের মাধ্যমে ডেটা বিশ্লেষণ বা মডেল তৈরির জন্য উপযুক্ত এবং ব্যবহারযোগ্য করা হয়।
এটি সাধারণত Data Cleaning এবং Data Preprocessing নামে পরিচিত দুটি প্রক্রিয়া দ্বারা সম্পন্ন হয়।
১. Raw Data Cleaning
Raw Data Cleaning হল এমন একটি প্রক্রিয়া যার মাধ্যমে ডেটা থেকে ভুল, অনুপস্থিত (missing), বা অপ্রয়োজনীয় তথ্য অপসারণ করা হয়। এটি ডেটার গুণগত মান নিশ্চিত করতে এবং মডেলিংয়ের জন্য একটি পরিষ্কার ডেটাসেট প্রস্তুত করতে সহায়ক।
সাধারণ Raw Data Cleaning পদক্ষেপ:
Missing Data (অনুপস্থিত ডেটা):
- অনুপস্থিত ডেটা ডেটাসেটে এক বা একাধিক মিসিং মান থাকতে পারে। এটি বিভিন্ন কারণে হতে পারে, যেমন ব্যবহারকারী তথ্য প্রদান করেনি বা ডেটা সংগ্রহের সময় সমস্যা হয়েছে।
- অনুপস্থিত ডেটা পরিচালনা করার পদ্ধতি:
- মিসিং ভ্যালু প্রতিস্থাপন: অনুপস্থিত মানকে গড়, মাধ্যমিক, সর্বাধিক পুনরাবৃত্তি, বা পূর্ববর্তী বা পরবর্তী মান দিয়ে প্রতিস্থাপন করা।
- ড্রপ করা: যদি অনুপস্থিত মান খুব বেশি থাকে, তবে ওই সারি বা কলামটি বাদ দেয়া যেতে পারে।
import pandas as pd df = pd.read_csv('data.csv') # অনুপস্থিত মান গড় দ্বারা পূর্ণ করুন df.fillna(df.mean(), inplace=True)Outliers (বহির্মুখী মান):
- Outliers হল ডেটার এমন মান যা মূল প্রবণতা বা প্যাটার্ন থেকে অনেকটাই পৃথক। এগুলি মডেলিংয়ে সমস্যা তৈরি করতে পারে।
- Outliers সনাক্ত এবং ম্যানেজ করা:
- Box plot ব্যবহার করে outliers চিহ্নিত করা এবং এগুলিকে বাদ দেয়া বা সংশোধন করা।
- Z-score বা IQR ব্যবহার করে outliers সনাক্ত করা।
import numpy as np from scipy import stats z_scores = np.abs(stats.zscore(df)) df = df[(z_scores < 3).all(axis=1)] # Z-score threshold 3 এর বেশি হলে বাদ দিনDuplicated Data (নকল ডেটা):
- কখনো কখনো ডেটাসেটে একই তথ্য একাধিকবার থাকতে পারে, যা মডেলিংয়ে বিভ্রান্তি সৃষ্টি করতে পারে।
- নকল ডেটা অপসারণ:
df = df.drop_duplicates() # নকল সারি বাদ দিনInconsistent Data (অসঙ্গত ডেটা):
- ডেটাতে inconsistency থাকতে পারে, যেমন নামের বানান ভিন্ন, তারিখের ফরম্যাটের তারতম্য ইত্যাদি।
- অসঙ্গত ডেটা মেরামত:
- String matching বা regular expressions ব্যবহার করে ডেটার মধ্যে অসঙ্গতি ঠিক করা।
df['column_name'] = df['column_name'].str.strip().str.lower() # স্ট্রিং ক্লিনিং
২. Data Preprocessing
Data Preprocessing হল ডেটাকে মডেলিংয়ের জন্য প্রস্তুত করার প্রক্রিয়া। এটি Raw Data Cleaning-এর পরবর্তী ধাপ, যেখানে ডেটাকে ডিপ লার্নিং বা মেশিন লার্নিং অ্যালগরিদমের জন্য মানানসই করে তোলা হয়।
সাধারণ Data Preprocessing পদক্ষেপ:
Feature Scaling (বৈশিষ্ট্য স্কেলিং):
- বিভিন্ন বৈশিষ্ট্য বা ফিচারের স্কেল ভিন্ন হতে পারে। বৈশিষ্ট্য স্কেলিং এমন একটি প্রক্রিয়া যার মাধ্যমে সমস্ত ফিচারের স্কেল সমান করা হয়, যাতে কোন একটি ফিচার মডেলকে প্রভাবিত না করে।
- Standardization (Z-score normalization) এবং Normalization (Min-Max scaling) সাধারণত ব্যবহৃত হয়।
from sklearn.preprocessing import StandardScaler, MinMaxScaler # Standardization scaler = StandardScaler() df_scaled = scaler.fit_transform(df) # Min-Max Scaling scaler = MinMaxScaler() df_scaled = scaler.fit_transform(df)Categorical Data Encoding (ক্যাটেগোরিক্যাল ডেটার এনকোডিং):
- ক্যাটেগোরিক্যাল ডেটা (যেমন লিঙ্গ, শহর, রঙ ইত্যাদি) মেশিন লার্নিং অ্যালগরিদমের জন্য প্রস্তুত করতে নম্বরে রূপান্তর করতে হয়।
- One-Hot Encoding এবং Label Encoding সাধারণত ব্যবহৃত পদ্ধতি।
from sklearn.preprocessing import OneHotEncoder, LabelEncoder # One-Hot Encoding encoder = OneHotEncoder(sparse=False) encoded_df = encoder.fit_transform(df[['column_name']]) # Label Encoding label_encoder = LabelEncoder() df['encoded_column'] = label_encoder.fit_transform(df['column_name'])Handling Imbalanced Data (অসমান ভারসাম্যপূর্ণ ডেটা):
- কখনো কখনো একটি ক্লাসের ডেটা অন্য ক্লাসের চেয়ে অনেক বেশি থাকতে পারে (যেমন, Class Imbalance)।
- Resampling techniques: Over-sampling (SMOTE), under-sampling ইত্যাদি ব্যবহার করা যেতে পারে।
from imblearn.over_sampling import SMOTE smote = SMOTE() X_resampled, y_resampled = smote.fit_resample(X, y)Feature Selection (বৈশিষ্ট্য নির্বাচন):
- কিছু ফিচার মডেলিংয়ের জন্য গুরুত্বপূর্ণ হতে পারে, এবং কিছু ফিচার অপ্রয়োজনীয় হতে পারে। Feature selection-এর মাধ্যমে শুধু গুরুত্বপূর্ণ বৈশিষ্ট্যগুলি নির্বাচন করা হয়।
- Recursive Feature Elimination (RFE) এবং Principal Component Analysis (PCA) সাধারণ পদ্ধতি।
from sklearn.decomposition import PCA pca = PCA(n_components=2) # কম্পোনেন্ট সংখ্যা সেট করুন df_reduced = pca.fit_transform(df)Data Transformation (ডেটা রূপান্তর):
- কখনো কখনো ডেটা রূপান্তর করা প্রয়োজন, যেমন Log Transformation, Box-Cox Transformation বা Square Root Transformation, বিশেষত যখন ডেটা খুব বেশি স্কেল বা বিশাল পরিবর্তনশীলতা থাকে।
df['column_name'] = df['column_name'].apply(np.log) # লোগারিদমিক রূপান্তর
৩. Data Splitting (ডেটা বিভাজন)
ডেটা প্রিপ্রসেসিংয়ের পর, ডেটাকে Training এবং Testing সেটে ভাগ করতে হয়। সাধারণত, 70%-80% ডেটা প্রশিক্ষণের জন্য এবং 20%-30% ডেটা পরীক্ষণের জন্য ব্যবহার করা হয়।
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
সারাংশ
Raw Data Cleaning এবং Preprocessing হল ডেটাকে মডেলিংয়ের জন্য উপযুক্ত ও বিশ্লেষণযোগ্য করার জন্য অত্যন্ত গুরুত্বপূর্ণ প্রক্রিয়া। ডেটা ক্লিনিং-এর মাধ্যমে ভুল, অনুপস্থিত বা অপ্রয়োজনীয় ডেটা অপসারণ করা হয় এবং প্রিপ্রসেসিংয়ের মাধ্যমে ডেটাকে মডেলিংয়ের জন্য প্রস্তুত করা হয়। এই প্রক্রিয়াগুলি সঠিকভাবে না করলে মডেল যথাযথভাবে প্রশিক্ষিত হতে পারে না এবং ফলস্বরূপ ভুল পূর্বাভাস দেয়।
Read more